import type { PluginOption } from 'vite'
import vue from '@vitejs/plugin-vue'
// 监控config文件，不用restart
import ViteRestart from 'vite-plugin-restart'
// vite-plugin-imagemin 打包压缩图片
// import viteImagemin from 'vite-plugin-imagemin'

// vite-plugin-compression 开启gzip、br压缩
import compressPlugin from 'vite-plugin-compression'

// 全局配置composition API
import AutoImport from 'unplugin-auto-import/vite'

// 全局配置组件引用
import Components from 'unplugin-vue-components/vite' // 注意后面有个/vite
// rollup-plugin-terser 打包 压缩js代码 清除console.log
import { terser } from 'rollup-plugin-terser'
// import { VitePWA as VitaPWA } from 'vite-plugin-pwa'

// const { ElementPlusResolver } = require('unplugin-vue-components/resolvers')
export const allPlugin = (mode) => {
  // const isDev = mode === 'development'
  const pluginArr: PluginOption | PluginOption[] = [
    vue(),
    ViteRestart({
      restart: [
        'my.config.[jt]s',
      ],
    }),
    compressPlugin({
      ext: '.gz', // gz br
      algorithm: 'gzip', // brotliCompress gzip
      deleteOriginFile: true,
    }),
    AutoImport({
      // 目标文件
      include: [
        /\.[tj]sx?$/, // .ts, .tsx, .js, .jsx
        /\.vue$/, /\.vue\?vue/, // .vue
        /\.md$/, // .md
      ],
      imports: ['vue', 'vue-router', 'pinia'],
      // ElementPlus 自动导入
      // resolvers: [ElementPlusResolver()],
      // 可以选择auto-import.d.ts生成的位置，使用ts建议设置为'src/auto-import.d.ts'
      dts: 'src/auto-import.d.ts',
      // eslint报错解决
      eslintrc: {
        enabled: false, // Default `false`
        filepath: './.eslintrc-auto-import.json', // Default `./.eslintrc-auto-import.json`
        globalsPropValue: true, // Default `true`, (true | false | 'readonly' | 'readable' | 'writable' | 'writeable')
      },
    }),
    Components({
      dirs: ['src/components', 'src/demo', 'src/layout'],
      extensions: ['vue', 'tsx'],
      // 配置文件生成位置
      dts: 'src/components.d.ts',
    }),
    terser(),
    // viteImagemin({
    //   gifsicle: {
    //     optimizationLevel: 7,
    //     interlaced: false
    //   },
    //   optipng: {
    //     optimizationLevel: 7
    //   },
    //   webp: {
    //     quality: 75
    //   },
    //   mozjpeg: {
    //     quality: 65
    //   },
    //   pngquant: {
    //     quality: [0.65, 0.9],
    //     speed: 4
    //   },
    //   svgo: {
    //     plugins: [
    //       {
    //         removeViewBox: false
    //       },
    //       {
    //         removeEmptyAttrs: false
    //       }
    //     ]
    //   }
    // })
  ]
  // if (!isDev) {
  //   const pwa:PluginOption|PluginOption[] = VitaPWA()
  //   pluginArr.concat(pwa)
  // }
  return pluginArr
}
